// 认证相关的actions
export default {
  // 登录
  async login({ commit, dispatch }, credentials) {
    try {
      commit('SET_LOGIN_LOADING', true)
      dispatch('setLoading', true)
      
      // 由于这是模拟环境，我们直接模拟登录成功
      // 在实际项目中，这里应该调用真实的登录API
      // const response = await this.$axios.post('/auth/login', credentials)
      // const { token, user } = response.data
      
      // 模拟登录成功的数据
      const token = 'mock-jwt-token-' + Date.now()
      const user = {
        id: 1,
        username: 'admin',
        email: 'admin@example.com',
        roles: ['admin'],
        permissions: ['manage_all']
      }
      
      // 设置token和用户信息
      commit('SET_TOKEN', token)
      commit('SET_USER', user)
      
      // 登录成功提示
      this.app.$message.success('登录成功')
      
      // 重定向到首页
      this.app.router.push('/')
    } catch (error) {
      console.error('Login failed:', error)
      this.app.$message.error('登录失败，请检查用户名和密码')
    } finally {
      commit('SET_LOGIN_LOADING', false)
      dispatch('setLoading', false)
    }
  },
  
  // 注册
  async register({ commit, dispatch }, userData) {
    try {
      commit('SET_REGISTER_LOADING', true)
      dispatch('setLoading', true)
      
      // 模拟注册成功
      // 实际项目中应该调用真实的注册API
      // const response = await this.$axios.post('/auth/register', userData)
      
      // 注册成功提示
      this.app.$message.success('注册成功，请登录')
      
      // 重定向到登录页
      this.app.router.push('/login')
    } catch (error) {
      console.error('Registration failed:', error)
      this.app.$message.error('注册失败，请稍后重试')
    } finally {
      commit('SET_REGISTER_LOADING', false)
      dispatch('setLoading', false)
    }
  },
  
  // 登出
  logout({ commit }) {
    try {
      // 清空认证信息
      commit('CLEAR_AUTH')
      
      // 登出成功提示
      this.app.$message.success('已成功登出')
      
      // 重定向到登录页
      this.app.router.push('/login')
    } catch (error) {
      console.error('Logout failed:', error)
    }
  },
  
  // 获取用户信息
  async getUserInfo({ commit, state }) {
    try {
      if (!state.token) return
      
      // 模拟获取用户信息
      // 实际项目中应该调用真实的API
      // const response = await this.$axios.get('/auth/user')
      // commit('SET_USER', response.data)
    } catch (error) {
      console.error('Failed to get user info:', error)
      commit('CLEAR_AUTH')
    }
  },
  
  // 检查token是否有效
  async checkToken({ commit, state }) {
    try {
      if (!state.token) return false
      
      // 模拟检查token有效性
      // 实际项目中应该调用真实的API
      // const response = await this.$axios.post('/auth/check-token')
      // return response.data.valid
      
      return true
    } catch (error) {
      console.error('Token validation failed:', error)
      commit('CLEAR_AUTH')
      return false
    }
  }
}